RからBigQueryに接続してデータを取得してみる
こんにちは、小澤です。
私はR大好きです。データ分析をするときは積極的にRを活用していきたいものですね。 というわけで、RからBigQueryに接続してデータ取得する方法を見ていきます。
BigQueryへの接続とbigrquery
RからBigQueryに接続するにはbigrqueryというライブラリが利用できます。
install.packages("bigrquery")
これを使うと簡単にSQLを発行してデータの取得ができます。
library(bigrquery) # サービスアカウントのkeyを使って認証 # email引数で認証も可能 bq_auth(path = "path/to/service-account.json") # 実行するSQLを記述 # ここでは公開データセットのものを利用している sql <- "select totals.newVisits, totals.pageviews, device.browser, device.operatingSystem, device.isMobile, geoNetwork.continent from `bigquery-public-data.google_analytics_sample.ga_sessions_*` where _TABLE_SUFFIX between '20160801' and '20170531' " # クエリを実行し、結果を取得 result <- bq_project_query("", sql) %>% bq_table_download() head(result)
以下のような結果が取得されます。
# A tibble: 6 × 6 newVisits pageviews browser operatingSystem isMobile continent 1 1 1 Internet Explorer Windows Phone TRUE Europe 2 1 1 BlackBerry BlackBerry TRUE Europe 3 1 1 Internet Explorer Windows Phone TRUE Europe 4 1 2 Internet Explorer Windows Phone TRUE Americas 5 NA 3 Internet Explorer Windows Phone TRUE Americas 6 NA 1 Safari Windows Phone TRUE Asia
必要なSQLさえ記述すれば、非常に簡単にデータを取得できることがわかるかと思います。
また、bq_auth
にて認証を行っていない場合は後続の処理で実行時に対話的に認証を行うことも可能です。
DBIのコネクションを作成する
bigrqueryでは、DBIのコネクションを作成することで、DBIやdbplryでの操作も可能です。
library(bigrquery) library(DBI) con <- dbConnect( bigquery(), project = "<your_project_id>", dataset = "<dataset_name>", billing = "<billing_project>" )
dataset
および billing
引数は任意の引数となります。
これは、BigQueryの構造が project.dataset.table
のような階層となっていることによるものです。
そのため、以下のような考え方になります。
- SQL文中でこれらを指定する場合にはそのタイミングで明示される
- dbplyrのtbl関数を利用する場合などは上位の階層を補完する
- 課金対象となるプロジェクトとデータを取得するプロジェクトが異なる場合billingで明示する
コネクションが取得できればあとは、他のデータベースへのコネクション取得時と同様の使い方ができます。
注意点
お使いの環境によっては、データがうまく取得できない場合があります。
- データ量が多い時に
bq_table_download()
実行時にExceeded rate limitsが発生する- page_sizeを15000にしてみてください
- bq_table_download: Exceeded rate limits · Issue #262 · r-dbi/bigrquery · GitHub
- dbplyrから利用時のみうまくデータが取得できない
- dbplyr 2.2.0の時にうまくいかないバグが報告されていますがフィックスされています
- うまくいかない場合は
devtools::install_github("r-dbi/bigrquery")
で最新パッケージをいれてみてください - Unable to get dplyr to work with bigrquery · Issue #492 · r-dbi/bigrquery · GitHub
おわりに
今回はRからBigQueryに接続するbigrqueryを紹介しました。 R大好きな方々のお役に立てれば幸いです。